#ifndef _MAZE_H
#define _MAZE_H

#include <iostream>
#include <stdlib.h>
#include <vector>
#include "Edge.h"
#include "Point.h"
#include "Triangle.h"
#include "Triangulator.h"
#include "PathCreator.h"
#include "HeapPQueue.h"
#include "PoissonDisks.h"

using namespace std;

class Maze {
    public:
        Maze (int numPoint, int distance, int w, int h);                   //Constructor
        virtual ~Maze();                                //virtual destructor
        void printPoints();                             //prints all the points in the pointlist
        void printPoisson();                            //prints the poisson disk distribution in ascii
        vector<Point*> getPoints();                     //returns list of pointers
        vector<Edge*> getEdges();                       //returns list of edges
        vector<Triangle*> getTriangles();               //returns lit of triangles
        int width;                                      //The Dimensions to be used in the maze
        int height;

    private:
    //initialization of variables and Lists that will be used in the maze
        PoissonDisks* disk;
        HeapPQueue<Point*, PointCompare>* pointsorter;  //Heap Priority Queue used for sorting the points first by X and then Y
        vector<Point*> pointlist;
        vector<Triangle*> trilist;
        vector<Edge*> edgelist;
        int index;

};
#endif
